//给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。 
//
// 
//
// 示例 1： 
//
// 
//输入:a = "11", b = "1"
//输出："100" 
//
// 示例 2： 
//
// 
//输入：a = "1010", b = "1011"
//输出："10101" 
//
// 
//
// 提示： 
//
// 
// 1 <= a.length, b.length <= 10⁴ 
// a 和 b 仅由字符 '0' 或 '1' 组成 
// 字符串如果不是 "0" ，就不含前导零 
// 
//
// Related Topics 位运算 数学 字符串 模拟 👍 1313 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String addBinary(String a, String b) {
        if(a.length() >= b.length()){
            int padZeroNum =  a.length() - b.length();
            for(int i = 0; i<padZeroNum; i++){
                b = "0" + b;
            }
        }else{
            int padZeroNum =  b.length() - a.length();
            for(int i = 0; i<padZeroNum; i++){
                a = "0" + a;
            }
        }
//        System.out.println(a);
//        System.out.println(b);
//        System.out.println("======");
        int carry = 0;//进位
        int[] sumArray = new int[a.length()];
        for(int i = a.length()-1; i>=0; i--){
            int curSum = Integer.parseInt(a.charAt(i)+ "") + Integer.parseInt(b.charAt(i)+"") + carry;//当前位，值可能为0 1 2 3
            if( curSum== 3){
                carry  = 1;
                sumArray[i] = 1;
            }else if( curSum== 2){
                carry  = 1;
                sumArray[i] = 0;
            }else{
                sumArray[i] = curSum;
                carry = 0;
            }
        }
        String res = carry ==1 ? "1": "";
        for (int i : sumArray) {
            res += i;
        }
        return res;
//        > 2025/08/21 14:48:41
//        解答成功:
//        执行耗时:8 ms,击败了6.98% 的Java用户
//        内存消耗:44.3 MB,击败了5.01% 的Java用户

    }
}
//leetcode submit region end(Prohibit modification and deletion)
